package miguel.seriesly;

import miguel.api.UserMisSeries;
import miguel.objects.Serie;
import miguel.objects.SerieExtendida;
import miguel.utils.DownloadHelper;
import miguel.utils.ManejoSD;
import miguel.utils.Prefs;
import miguel.utils.SeriesLySQLiteHelper;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.content.res.Configuration;

public class PantallaMenu extends Activity {
	
	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
	}
	
	private CargarSeries cargarSeries = null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.menu);
		
		//Cargamos la series
		if(cargarSeries == null) {
			cargarSeries = new CargarSeries();
			cargarSeries.execute();
		}
		
		//Botones
		final Button btnVerSeriesSiguiendo = (Button) findViewById(R.id.btnVerSeriesSiguiendo);
		final Button btnSeriesTerminadas = (Button) findViewById(R.id.btnSeriesTerminadas);
		final Button btnMostrarTodasSeries = (Button) findViewById(R.id.btnMostrarTodasSeries);
		final Button btnMostrarTodasSeriesPendientes = (Button) findViewById(R.id.btnMostrarTodasSeriesPendientes);
		final Button btnSalirSesion = (Button) findViewById(R.id.btnSalirSesion);
		
		btnVerSeriesSiguiendo.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	cargarMostrarSeries("Watching");
            }
        });
		
		
		btnSeriesTerminadas.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	cargarMostrarSeries("Finished");
            }
        });
		
		btnMostrarTodasSeriesPendientes.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	//Salimos de la sesión
            	cargarMostrarSeries("Pending");
            }
        });
		
		btnMostrarTodasSeries.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	cargarMostrarSeries("All");
            }
        });
		
		btnSalirSesion.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	//Paramos el servicio de comprobar si hay series
            	stopService();
            	//Salimos de la sesión
            	salirSesion();
            }
        });
	}
	
	private void salirSesion() {
		//Paramos el servicio de notificaciones
		stopService(); 
		
		SharedPreferences prefs =
		     getSharedPreferences(AndroidSeriesLyActivity.TAG,Context.MODE_PRIVATE);
		prefs.edit();
		SharedPreferences.Editor editor = prefs.edit();
		editor.remove("loginAuto");
		editor.commit();
		
		Prefs.put(PantallaMenu.this, "logged_in", false);
		Intent intent = new Intent(PantallaMenu.this, AndroidSeriesLyActivity.class);
		startActivity(intent);
		finish();
	}
	
	private void cargarMostrarSeries(String estado) {
		Intent intent =new Intent();
    	intent.setClass(PantallaMenu.this, PantallaVerSeries.class);
    	intent.putExtra("estado", estado);
        startActivity(intent);
	}
	
	private class CargarSeries extends AsyncTask<String, Void, Void> {
		ProgressDialog pd;
		SeriesLySQLiteHelper sqlHelper;
		
		//Método que se hace en segundo plano
		@Override
		protected Void doInBackground(String... params) {
			//Si no hay series es que se ha entrado por primera vez en la aplicación
			//O el usuario aún no ha metido series, en todo caso, bajamos las series y las metemos en la base de datos
			if(sqlHelper.numSeries() == 0) {
				//Si hay cero series puede ser o porque el usuario no tiene series agregadas
				//O porque es la primera vez que habre la aplicación y aún no se han agregado
				Serie[] seriesBajar = UserMisSeries.getMisSeries(PantallaMenu.this);
				
				SerieExtendida[] series = new SerieExtendida[seriesBajar.length];
				for(int i=0; i<seriesBajar.length; i++) {
					series[i] = new SerieExtendida(seriesBajar[i], 0);
				}
				
				//Ahora guardamos las series en la base de datos
				for(int i=0; i<series.length; i++) {
					sqlHelper.insertarSerie(series[i]);
				}
				
				//Ahora guardamos las imagenes en la tarjeta de memoria
				ManejoSD manejoSD = new ManejoSD();
				DownloadHelper downloadHelper = new DownloadHelper();
				for(int i=0; i<series.length; i++) {
					String urlSmallThumb = series[i].getSmall_thumb();
					String nombreSmallThumb = urlSmallThumb.split("/")[urlSmallThumb.split("/").length - 1];
					
					//Si no está la imagen ya cargada en la tarjeta de memoria la bajamos y la guardamos
					if(manejoSD.cargarImagen("small_thumb", nombreSmallThumb) == null) {
						Bitmap imagenSerie = downloadHelper.getImageBitmap(series[i].getSmall_thumb());
						manejoSD.guardarImagenes("small_thumb", nombreSmallThumb, imagenSerie);
					}
				}
			}
			
			return null;
		}
		
		//Método que se llama al terminal doInBackground
		@Override
		protected void onPostExecute(Void result) {
			//Si está cargado el ProgressBar lo descargamos
			if(pd != null) {
				pd.dismiss();
				pd = null;
			}
			
			//Iniciamos el servicio de comprobar las nuevas series
			startService();
		}
		
		//Método que se llama al principio de la ejecución
		@Override
		protected void onPreExecute() {
			//Inicializamos el ProgressDialog
			pd = new ProgressDialog(PantallaMenu.this, R.style.FondoTransparente);
			pd.setTitle(R.string.espere);
			pd.setMessage(getString(R.string.cargandoSeries));
			pd.setCancelable(false);
			pd.show();
			
			sqlHelper = new SeriesLySQLiteHelper(PantallaMenu.this, "DB_SeriesLy", null, 1);
			
			super.onPreExecute();
		}
	}
	
	private void startService() {
        if(startService(new Intent(this, ComprobarNotificaciones.class)) == null)
        	Log.e("Error", "No se pudo iniciar el servicio");
    }
    
    private void stopService() {
    	Intent svc = new Intent(this, ComprobarNotificaciones.class);
		stopService(svc);
    }
}
